package com.sunyur.tailor.channel.service.inner.order.model;

import com.sunyur.tailor.channel.common.inner.base.SunyurListParam;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @ClassName GetListOrderItemByCodesModel
 * @Description 批量获取订单行信息返回实体
 * @Author hao.tian
 * @Date 2021/5/11
 * @Version v1.0
 */
@Data
public class GetListOrderItemByCodesModel extends SunyurListParam {


    private static final long serialVersionUID = -8926772068167661212L;
    /**
     * 订单行号
     */
    private String orderItemCode;

    /**
     * 订单行外部编号
     */
    private String orderItemPurCode;

    /**
     * PR单号
     */
    private String applyCode;

    /**
     * PR单行号
     */
    private String applyItemCode;

    /**
     * 来源单号（申请单号，寻源单号）
     */
    private String sourceCode;

    /**
     * 来源行号（申请单号，寻源单号）
     */
    private String sourceItemCode;

    /**
     * 来源类型，用来标识申请单和寻源单(0:请购 1:寻源 2:手动创建 3:计划订单)
     */
    private Integer sourceType;

    /**
     * 含税单价
     */
    private BigDecimal taxIncludedPrice;

    /**
     * 不含税单价
     */
    private BigDecimal taxExcludedPrice;

    /**
     * 税率
     */
    private BigDecimal taxRate;

    /**
     * 税码
     */
    private String taxCode;

    /**
     * 加放数量
     */
    private BigDecimal addQuantity;

    /**
     * 订单行收货状态(待收货0,部分收货1,收货审批中2,已收货3)
     */
    private Integer receiveStatus;

    /**
     * 采购员电话
     */
    private Long expectedArriveTime;

    /**
     * 交货日期
     */
    private Long finalArriveTime;

    /**
     * 协议行CODE
     */
    private String protocolItemCode;

    /**
     * 业务单元外部Code
     */
    private String businessUnitPurCode;

    /**
     * 业务单元名称
     */
    private String businessUnitName;

    /**
     * 如果countType是0，则表示数量 如果countType是1则表示含税总金额
     */
    private BigDecimal count;

    /**
     * 0：数量 1:金额
     */
    private Integer countType;

    /**
     * 使用人Code（外部编号，所有人员都是外部编号，没有外部编号返回内部编号）
     */
    private String userCode;

    /**
     * 使用人姓名
     */
    private String userName;

    /**
     * 使用部门内部Code
     */
    private String userOrgCode;

    /**
     * 使用部门外部Code
     */
    private String userOrgPurCode;

    /**
     * 使用部门名称
     */
    private String useOrgName;

    /**
     * 物资属性编码
     */
    private String materielAttrCode;

    /**
     * 物资属性名称
     */
    private String materielAttrName;

    /**
     * 受益对象编码
     */
    private String beneficiaryCode;

    /**
     * 受益对象名称
     */
    private String beneficiaryName;

    /**
     * 核算成本中心名称
     */
    private String settleGroupName;

    /**
     * 核算成本中心编码
     */
    private String settleGroupCode;

    /**
     * 核算成本中心外部名称
     */
    private String settleGroupPurName;

    /**
     * 核算成本中心外部编码
     */
    private String settleGroupPurCode;

    /**
     * 费用类型编码
     */
    private String expenseTypeCode;

    /**
     * 费用类型名称
     */
    private String expenseTypeName;

    /**
     * 费用类型外部编码
     */
    private String expenseTypePurCode;

    /**
     * 库存组织Code
     */
    private String stockOrganizationCode;

    /**
     * 库存组织名称
     */
    private String stockOrganizationName;

    /**
     * 库存地点Code
     */
    private String stockSiteName;

    /**
     * 类型{0:商品,1:物料,4:自定义物料}
     */
    private Integer type;

    /**
     * 备注
     */
    private String remark;
    /**
     * 物料分类外部编码
     */
    private String materielCategoryPurCode;

    /**
     * 收货地址（包含收货人，电话，地址）
     */
    private ReceiveAddress receiveAddress;

    @Data
    public static class ReceiveAddress implements Serializable{


        private static final long serialVersionUID = 115530715577236475L;
        /**
         * 收货省编码（一级地址编码）
         */
        private String provinceCode;

        /**
         * 收货省（一级地址名称）
         */
        private String provinceName;

        /**
         * 收货市编码（二级地址编码）
         */
        private String cityCode;

        /**
         * 收货市（二级地址名称）
         */
        private String cityName;

        /**
         * 收货区/县编码（三级地址编码）
         */
        private String countyCode;

        /**
         * 收货区/县（三级地址名称）
         */
        private String countyName;

        /**
         * 收货街道编码（四级地址编码）
         */
        private String townCode;

        /**
         * 收货街道（四级地址名称）
         */
        private String townName;

        /**
         * 详细地址
         */
        private String address;

        /**
         * 姓名
         */
        private String name;

        /**
         * 手机号
         */
        private String mobile;

        /**
         * 地址外部编码
         */
        private String code;

        /**
         * 地址内部编码
         */
        private String purCode;
    }

    /**
     * 收票地址（包含收货人，电话，地址）
     */
    private InvoiceReceiveAddress invoiceReceiveAddress;

    @Data
    public static class InvoiceReceiveAddress implements Serializable{


        private static final long serialVersionUID = 1192383157067796442L;
        /**
         * 收货省编码（一级地址编码）
         */
        private String provinceCode;

        /**
         * 收货省（一级地址名称）
         */
        private String provinceName;

        /**
         * 收货市编码（二级地址编码）
         */
        private String cityCode;

        /**
         * 收货市（二级地址名称）
         */
        private String cityName;

        /**
         * 收货区/县编码（三级地址编码）
         */
        private String countyCode;

        /**
         * 收货区/县（三级地址名称）
         */
        private String countyName;

        /**
         * 收货街道编码（四级地址编码）
         */
        private String townCode;

        /**
         * 收货街道（四级地址名称）
         */
        private String townName;

        /**
         * 详细地址
         */
        private String address;

        /**
         * 姓名
         */
        private String name;

        /**
         * 手机号
         */
        private String mobile;

        /**
         * 地址外部编码
         */
        private String code;

        /**
         * 地址内部编码
         */
        private String purCode;
    }

    /**
     * 物料分类编号
     */
    private String materielCategoryCode;

    /**
     * 物料分类名称
     */
    private String materielCategoryName;

    /**
     * 商城类目编码
     */
    private String mallCategoryCode;

    /**
     * 商城类目名称
     */
    private String mallCategoryName;

    /**
     * 物料编号
     */
    private String materielCode;

    /**
     * 物料名称
     */
    private String materielName;

    /**
     * 物料规格
     */
    private String materielSpec;

    /**
     * 商品编号
     */
    private String productCode;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 商品属性组(0204上线)
     */
    private Map<String,Object> productAttrs;

    /**
     * 商品规格
     */
    private String productSpec;

    /**
     * 计量单位编号（有商品的用商品单位，无商品的用物料单位）
     */
    private String unitCode;

    /**
     * 计量单位名称（有商品的用商品单位，无商品的用物料单位）
     */
    private String unitName;

    /**
     * 扩展（订单上的非标准化的字段）
     */
    private String extend;

    /**
     * 附件集合
     */
    private List<Access> accessories;
    @Data
    public static class Access implements Serializable{


        private static final long serialVersionUID = 1264431645276645480L;
        /**
         * 附件唯一标识
         */
        private String key;

        /**
         * 附件名称
         */
        private String name;
    }

    /**
     * 预算类型编码
     */
    private String budgetTypeCode;

    /**
     * 预算单元编码
     */
    private String budgetCode;

    /**
     * 预算科目编码
     */
    private String budgetDetailCode;

}
